home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CICA 1993 April
/
CICA MS Windows - April 1993.iso
/
unzipped
/
programr
/
bcpp
/
bmploadr
/
bmploadr.c
next >
Wrap
C/C++ Source or Header
|
1992-03-14
|
16KB
|
464 lines
/*
Windows 3.0 Bitmap Loader
Version 1.00
Started: February 28, 1992
Finished:
Developer : Jim Huang
*/
#include <windows.h>
#include <stdlib.h>
#include <direct.h>
#include <time.h>
#include <dos.h>
#include "bmploadr.h"
/* Windows Function - Prototyping */
long FAR PASCAL WndProc (HWND, WORD, WORD, LONG);
BOOL FAR PASCAL AboutDlgProc (HWND, WORD, WORD, LONG);
BOOL FAR PASCAL FileDlgProc (HWND, WORD, WORD, LONG);
BOOL FAR PASCAL SetupDlgProc (HWND, WORD, WORD, LONG);
BOOL extern FAR PASCAL SetDeskWallPaper (LPSTR);
void SetNextBMP (LPSTR);
HANDLE hInst; /* Handle to Windows instances */
char szAppName[] = "BMP", /* Application Name */
szFileName[96],
szCurDir[96],
Random[4], AutoLoad[4];
int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
HWND hwnd; /* Handle to the main Window */
MSG msg; /* MSG structure to store your messages */
WNDCLASS wndclass; /* Windows class structure */
HANDLE hAccel; /* Handle to the accelerator keys */
hInst = hInstance; /* Handle for Windows instances */
/* Create the application window */
if (!hPrevInstance)
{
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_BYTEALIGNWINDOW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInst;
wndclass.hIcon = LoadIcon (hInstance, szAppName);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.hbrBackground = GetStockObject (WHITE_BRUSH);
wndclass.lpszMenuName = szAppName;
wndclass.lpszClassName = szAppName;
RegisterClass (&wndclass);
}
/* Create the application windows */
hwnd = CreateWindow (szAppName, "Bitmap Loader",
WS_CAPTION | WS_SYSMENU |
WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_OVERLAPPED,
0, 0, 190, 40, NULL, NULL, hInstance, NULL);
ShowWindow (hwnd, nCmdShow);
UpdateWindow (hwnd);
/* Load the accelerator table */
hAccel = LoadAccelerators (hInstance, szAppName);
/* Message Handling Loop */
while (GetMessage (&msg, NULL, 0, 0))
{
if (!TranslateAccelerator (hwnd, hAccel, &msg))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
}
return msg.wParam;
}
long FAR PASCAL WndProc (HWND hwnd, WORD message, WORD wParam, LONG lParam)
{
static HANDLE hInstance; /* handle for each instances */
static HCURSOR hCursor; /* handle for the cursor */
static HICON hIcon; /* handle for the icon */
/* Variables determining the position of the scroll bar */
FARPROC lpfn; /* Far Pointer for each dialog box */
HDC hdc; /* handle for the display device */
HMENU hmenu; /* handle for the menu */
PAINTSTRUCT ps; /* holds PAINT information */
char szBuffer[80];
short i;
switch (message)
{
case WM_CREATE:
/* The WM_CREATE message is sent once to a window when the */
/* window is created. The window procedure for the new window */
/* receives this message after the window is created, but */
/* before the window becomes visible. */
/* */
/* Parameters: */
/* */
/* lParam - Points to a CREATESTRUCT structure with */
/* the following form: */
/* */
/* typedef struct */
/* { */
/* LPSTR lpCreateParams; */
/* HANDLE hInst; */
/* HANDLE hMenu; */
/* HWND hwndParent; */
/* int cy; */
/* int cx; */
/* int y; */
/* int x; */
/* LONG style; */
/* LPSTR lpszName; */
/* LPSTR lpszClass; */
/* DWORD dwExStyle; */
/* } CREATESTRUCT; */
hIcon = LoadIcon (hInstance, szAppName);
hInstance = ((LPCREATESTRUCT) lParam)->hInstance;
GetProfileString (szAppName, "BMPSource", NULL, szCurDir, sizeof (szCurDir));
GetProfileString (szAppName, "Wallpaper", NULL, szFileName, sizeof (szFileName));
GetProfileString (szAppName, "AutoLoad", NULL, AutoLoad, sizeof (AutoLoad));
GetProfileString (szAppName, "Random", NULL, Random, sizeof (Random));
if (lstrlen (szFileName)) {
lstrcpy (szBuffer, szCurDir);
lstrcat (szBuffer, "\\");
lstrcat (szBuffer, szFileName);
if (SetDeskWallPaper (szBuffer)) {
SetWindowText (hwnd, szFileName);
InvalidateRect (GetDesktopWindow(), NULL, TRUE);
}
}
if (!lstrcmpi (Random, "On"))
SetNextBMP (szCurDir);
if (!lstrlen (szCurDir))
SendMessage (hwnd, WM_COMMAND, IDM_SETUP, 0L);
return 0;
case WM_COMMAND:
/* The Windows messages for action bar and pulldown menu items */
/* are processed here. */
/* The WM_COMMAND message contains the message ID in its first */
/* parameter (wParam). This routine is programmed to SWITCH on */
/* the #define values for the menu items in the application's */
/* header (*.H) file. The ID values have the format, IDM_itemname. */
/* The service routines for the various menu items follow */
/* the CASE statements up to the generated BREAK statements. */
/* Get the menu handle */
hmenu = GetMenu (hwnd);
switch (wParam) {
case IDM_ABOUT:
lpfn = MakeProcInstance (AboutDlgProc, hInstance);
DialogBox (hInstance, "AboutDlg", hwnd, lpfn);
FreeProcInstance (lpfn);
return 0;
case IDM_OPEN:
lpfn = MakeProcInstance (FileDlgProc, hInstance);
DialogBox (hInstance, "FileDlg", hwnd, lpfn);
FreeProcInstance (lpfn);
SetWindowText (hwnd, szFileName);
return 0;
case IDM_SETUP:
lpfn = MakeProcInstance (SetupDlgProc, hInstance);
DialogBox (hInstance, "SetupDlg", hwnd, lpfn);
FreeProcInstance (lpfn);
return 0;
case IDM_EXIT:
SendMessage (hwnd, WM_CLOSE, 0, 0L);
return 0;
}
break;
case WM_PAINT:
/* Obtain a handle to the device context */
/* BeginPaint will sends WM_ERASEBKGND if appropriate */
hdc = BeginPaint (hwnd, &ps);
EndPaint (hwnd, &ps);
return 0;
/* Tell Window to close the application window. Destroy the window */
case WM_CLOSE:
DestroyWindow (hwnd);
return 0;
/* Destroys the window */
case WM_DESTROY:
PostQuitMessage (0);
return 0;
}
return DefWindowProc (hwnd, message, wParam, lParam);
}
/* ***************************************************************************** */
void SetNextBMP (LPSTR dir)
{
char szBuffer[80];
short i = 0, nextbmp, j;
struct _find_t findt;
lstrcpy (szBuffer, dir);
lstrcat (szBuffer, "\\");
lstrcat (szBuffer, "*.BMP");
srand ((unsigned)time(NULL));
nextbmp = rand();
if (!_dos_findfirst (szBuffer, _A_NORMAL, &findt)) {
i++;
while (!_dos_findnext (&findt))
i++;
_dos_findfirst (szBuffer, _A_NORMAL, &findt);
if (i == 0)
WriteProfileString (szAppName, "Wallpaper", findt.name);
else {
for (j = 0; j < nextbmp % i; j++)
_dos_findnext (&findt);
WriteProfileString (szAppName, "Wallpaper", findt.name);
}
}
}
LPSTR lstrchr (LPSTR str, char ch)
{
while (*str)
{
if (ch == *str)
return str;
str = AnsiNext (str);
}
return NULL;
}
LPSTR lstrrchr (LPSTR str, char ch)
{
LPSTR strl = str + lstrlen (str);
do {
if (ch == *strl)
return strl;
strl = AnsiPrev (str, strl);
} while (strl > str);
return NULL;
}
/* ***************************************************************************** */
BOOL FAR PASCAL AboutDlgProc (HWND hDlg, WORD message, WORD wParam, LONG lParam)
{
switch (message)
{
case WM_INITDIALOG:
SetDlgItemText (hDlg, IDD_VER, "Version 1.00a");
SetDlgItemText (hDlg, IDD_NAME, "Written by: Jim Huang");
SetDlgItemText (hDlg, IDD_DATE, "Copyright ⌐1992");
return TRUE;
case WM_COMMAND:
switch (wParam)
{
case IDOK:
EndDialog (hDlg, 0);
return TRUE;
}
break;
}
return FALSE;
}
BOOL FAR PASCAL FileDlgProc (HWND hDlg, WORD message, WORD wParam, LONG lParam)
{
static char cLastChar, szFName[96] = "*.BMP", szFileSpec[16];
char szBuffer[96];
short nEditLen, count;
WORD wFileAttr;
switch (message)
{
case WM_INITDIALOG:
lstrcpy (szBuffer, szCurDir);
SendDlgItemMessage (hDlg, IDD_FNAME, EM_LIMITTEXT, 80, 0L) ;
DlgDirList (hDlg, szBuffer, IDD_DLIST, IDD_FPATH, 0x0010 | 0x4000 | 0x8000);
DlgDirList (hDlg, "*.BMP", IDD_FLIST, IDD_FPATH, 0);
SetDlgItemText (hDlg, IDD_FNAME, szFName);
return TRUE;
case WM_COMMAND:
switch (wParam)
{
case IDD_FLIST:
switch (HIWORD (lParam))
{
case LBN_SELCHANGE:
if (DlgDirSelect (hDlg, szFileName, IDD_FLIST))
lstrcat (szFileName, szFileSpec);
SetDlgItemText (hDlg, IDD_FNAME, szFileName);
return TRUE;
case LBN_DBLCLK:
if (DlgDirSelect (hDlg, szFileName, IDD_FLIST)) {
lstrcat (szFileName, szFileSpec);
DlgDirList (hDlg, "*.BMP", IDD_FLIST, IDD_FPATH, 0);
SetDlgItemText (hDlg, IDD_FNAME, szFileSpec);
}
else {
SetDlgItemText (hDlg, IDD_FNAME, szFileName);
SendMessage (hDlg, WM_COMMAND, IDOK, 0L);
}
return TRUE ;
}
break;
case IDD_DLIST:
switch (HIWORD (lParam))
{
case LBN_DBLCLK:
if (DlgDirSelect (hDlg, szFileName, IDD_DLIST)) {
lstrcat (szFileName, szFileSpec);
DlgDirList (hDlg, szFileName, IDD_DLIST, IDD_FPATH, 0x0010 | 0x4000 | 0x8000);
DlgDirList (hDlg, "*.BMP", IDD_FLIST, IDD_FPATH, 0);
}
return TRUE ;
}
break;
case IDD_FNAME:
if (HIWORD (lParam) == EN_CHANGE)
EnableWindow (GetDlgItem (hDlg, IDOK), (BOOL) SendMessage (LOWORD (lParam),
WM_GETTEXTLENGTH, 0, 0L));
return TRUE;
case IDOK:
GetDlgItemText (hDlg, IDD_FNAME, szFileName, 80);
nEditLen = lstrlen (szFileName);
cLastChar = *AnsiPrev (szFileName, szFileName + nEditLen);
if (cLastChar == '\\' || cLastChar == ':')
lstrcat (szFileName, szFileSpec);
if (lstrchr (szFileName, '*') || lstrchr (szFileName, '?')) {
if (DlgDirList (hDlg, szFileName, IDD_FLIST, IDD_FPATH, wFileAttr)) {
lstrcpy (szFileSpec, szFileName);
SetDlgItemText (hDlg, IDD_FNAME, szFileSpec);
}
else
MessageBeep (0);
return TRUE;
}
lstrcat (lstrcat (szFileName, "\\"), szFileSpec);
if (DlgDirList (hDlg, szFileName, IDD_FLIST, IDD_FPATH, wFileAttr)) {
lstrcpy (szFileSpec, szFileName);
SetDlgItemText (hDlg, IDD_FNAME, szFileSpec);
return TRUE;
}
szFileName[nEditLen] = '\0';
if (SetDeskWallPaper (szFileName)) {
WriteProfileString (szAppName, "Wallpaper", szFileName);
WriteProfileString ("windows", "Wallpaper", "(None)");
InvalidateRect (GetDesktopWindow(), NULL, TRUE);
}
case IDCANCEL :
EndDialog (hDlg, FALSE);
return TRUE;
}
}
return FALSE;
}
BOOL FAR PASCAL SetupDlgProc (HWND hDlg, WORD message, WORD wParam, LONG lParam)
{
switch (message)
{
case WM_INITDIALOG:
if (lstrlen (szCurDir))
SetDlgItemText (hDlg, IDD_DIRECTORY, szCurDir);
if (!lstrcmpi (AutoLoad, "On"))
CheckDlgButton (hDlg, IDD_CHECK1, 1);
if (!lstrcmpi (Random, "On"))
CheckDlgButton (hDlg, IDD_CHECK2, 1);
return TRUE;
case WM_COMMAND:
switch (wParam)
{
case IDOK:
GetDlgItemText (hDlg, IDD_DIRECTORY, szCurDir, sizeof (szCurDir));
if (!lstrlen (szCurDir)) {
MessageBox (hDlg, "Please Specify the BitMap Directory", NULL, MB_OK | MB_ICONSTOP);
return FALSE;
}
WriteProfileString (szAppName, "BMPSource", szCurDir);
if (IsDlgButtonChecked (hDlg, IDD_CHECK1))
WriteProfileString (szAppName, "AutoLoad", "On");
else
WriteProfileString (szAppName, "AutoLoad", "Off");
if (IsDlgButtonChecked (hDlg, IDD_CHECK2))
WriteProfileString (szAppName, "Random", "On");
else
WriteProfileString (szAppName, "Random", "Off");
case IDCANCEL:
EndDialog (hDlg, 0);
return TRUE;
}
break;
}
return FALSE;
}